﻿using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Threading;
using System.Globalization;
using System.Resources;
using EHTWebsite.Code;
using System.Text;
using System.IO;
using System.Net;
using System.Web.Security;
using EHTWebsiteProject.Code.Entity;
using EHTWebsiteProject.Code.BLL;

namespace EHTWebsiteProject.Administrator
{
    public partial class EHTUserUI : System.Web.UI.Page
    {

        private String message = "";
        private String UserName = "";
        public Boolean IsVN = true;
        private String Type = "";
        private String languageCode = "vi-VN";
        private ResourceManager rm = new ResourceManager("Resources.SiteMap", System.Reflection.Assembly.Load("App_GlobalResources"));

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                try
                {
                    languageCode = Session[HangSo.LANGUAGE_CODE].ToString();
                    if (languageCode == "en-us")
                    {
                        IsVN = false;
                    }

                }
                catch (Exception ex)
                {
                }

                try
                {
                    Type = Request.QueryString["Type"].ToString();
                }
                catch
                {

                }


                try
                {
                    if (Type == "Add")
                        UserName = "";
                    else if (Type == "Edit")
                        UserName = Request.QueryString["User"].ToString();
                    else
                        UserName = Session["UserName"].ToString();
                }
                catch
                {

                }

                try
                {
                    message = Request.QueryString["Message"].ToString();
                    if (message != "")
                        ltrErorr.Text = HelpMethod.ApplySuccess(message);
                }
                catch
                {

                }
                Thread.CurrentThread.CurrentCulture = new CultureInfo(languageCode);
                LoadLanguage(Thread.CurrentThread.CurrentCulture);
                GetUser(UserName);
            }
        }
        
        /// <summary>
        /// Ham load ngon ngu
        /// </summary>
        /// <param name="ci"></param>
        public void LoadLanguage(CultureInfo ci)
        {
            lbSave.Text = rm.GetString("lbSave", ci);
            lbCancel.Text = rm.GetString("lbCancel", ci);
            lbApply.Text = rm.GetString("lbApply", ci);
            lbHelp.Text = rm.GetString("lbHelp", ci);
            lbConfirmPass.Text = rm.GetString("lbConfirmPass", ci);
            lbPass.Text = rm.GetString("lbPass", ci);
            lbEmail.Text = rm.GetString("lbEmail", ci);
            lbTaiKhoan.Text = rm.GetString("lbTaiKhoan", ci);
            lbUserAdd.Text = rm.GetString("lbUserAdd",ci);
            lbPassNew.Text = rm.GetString("lbPassNew", ci);
        }
        /// <summary>
        /// ham lay thong tin tai khoan
        /// </summary>
        /// <param name="UserName"></param>

        public void GetUser(String UserName)
        {
            if (UserName == "")
            {
                if (IsVN == true)
                    lbAdd_Edit.Text = HangSo.Add_VN;
                else
                    lbAdd_Edit.Text = HangSo.Add_Other;

                lbPassNew.Visible = false;
                txtPass.Visible = false;
            }
            else
            {
                if (IsVN == true)
                    lbAdd_Edit.Text = HangSo.Edit_VN;
                else
                    lbAdd_Edit.Text = HangSo.Edit_Other;
                MembershipUser theUser = Membership.GetUser(UserName);

                if (theUser == null)
                    Response.Redirect("EHTSystem.aspx");
                else
                {
                    String role = Roles.GetRolesForUser(UserName)[0];
                    if (role == HangSo.ROLE_ADMIN)
                    {
                        this.ckAdmin.Checked = true;

                        // trường hợp sửa người dùng là nhóm Admin và Tài khoản đang Online -> không cho thay đổi nhóm
                        if (theUser.IsOnline)
                        {
                            this.ckAdmin.Enabled = false;
                        }
                        else
                        {
                            this.ckAdmin.Enabled = true;
                        }
                    }
                    else
                    {
                        this.ckAdmin.Checked = false;
                        this.ckAdmin.Visible = false;
                    }

                    txtAccount.Text = theUser.UserName;
                    txtEmail.Text = theUser.Email;


                    this.txtAccount.Enabled = false;
                    this.txtEmail.Enabled = false;
                    ViewState["Role"] = role;
                }
            }
        }

        /// <summary>
        /// Ham kiem tra du lieu
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public Boolean ValidateData()
        {
            String action = lbAdd_Edit.Text;
            Boolean flag = true;
            if (txtAccount.Text == "")
            {
                if (IsVN == true)
                    message = HangSo.check_VN;
                else
                    message = HangSo.check_Other;
                txtAccount.Focus();
                flag = false;
            }
            if (txtEmail.Text == "")
            {
                if (IsVN == true)
                    message = HangSo.check_VN;
                else
                    message = HangSo.check_Other;
                txtEmail.Focus();
                flag = false;
            }

            if (HelpMethod.IsEmail(txtEmail.Text) == false)
            {
                if (IsVN == true)
                    message = HangSo.Eorr_Mail;
                else
                    message = HangSo.Eorr_MailOther;
                txtEmail.Focus();
                flag = false;
            }           
            if (txtConfirmPass.Text == "")
            {
                if (IsVN == true)
                    message = HangSo.check_VN;
                else
                    message = HangSo.check_Other;
                txtEmail.Focus();
                flag = false;
            }
            if (action == HangSo.ACTION_ADD)
            {
                if (txtPassword.Text == "")
                {
                    if (IsVN == true)
                        message = HangSo.check_VN;
                    else
                        message = HangSo.check_Other;
                    txtEmail.Focus();
                    flag = false;
                }

                if (txtPassword.Text.Length <5)
                {
                    if (IsVN == true)
                        message = HangSo.LenghtPass;
                    else
                        message = HangSo.LenghtPassOther;
                    txtEmail.Focus();
                    flag = false;
                }

                if (txtPassword.Text != txtConfirmPass.Text)
                {
                    if (IsVN == true)
                        message = HangSo.Confirm_Pass;
                    else
                        message = HangSo.Confirm_PassOther;
                    txtEmail.Focus();
                    flag = false;
                }
            }

            if (action == HangSo.ACTION_UPDATE)
            {
                if (txtPass.Text == "")
                {
                    if (IsVN == true)
                        message = HangSo.check_VN;
                    else
                        message = HangSo.check_Other;
                    txtEmail.Focus();
                    flag = false;
                }

                if (txtPass.Text.Length < 5)
                {
                    if (IsVN == true)
                        message = HangSo.LenghtPass;
                    else
                        message = HangSo.LenghtPassOther;
                    txtEmail.Focus();
                    flag = false;
                }

                if (txtPass.Text != txtConfirmPass.Text)
                {
                    if (IsVN == true)
                        message = HangSo.Confirm_Pass;
                    else
                        message = HangSo.Confirm_PassOther;
                    txtEmail.Focus();
                    flag = false;
                }
            }
            return flag;
        }

        protected void ImgSave_Click(object sender, ImageClickEventArgs e)
        {
            String action = "";

            if (lbAdd_Edit.Text == HangSo.Add_VN || lbAdd_Edit.Text == HangSo.Add_Other)
                action = HangSo.ACTION_ADD;
            else
                action = HangSo.ACTION_UPDATE;


            if (ValidateData() == false)
            {
                ltrErorr.Text = HelpMethod.ErorrLogin(message);
                return;
            }
            else
            {
                String userName = this.txtAccount.Text.Trim();
                String password = this.txtPassword.Text;
                String email = this.txtEmail.Text.Trim();
                String role;
                if (ckAdmin.Checked)
                    role = HangSo.ROLE_ADMIN;
                else
                    role = HangSo.ROLE_USER;
                if (action == HangSo.ACTION_ADD)
                {
                    MembershipUser theUser = Membership.GetUser(userName);

                    //trường hợp User Name chưa tồn tại mới cho đăng kí
                    if (theUser == null)
                    {
                        theUser = Membership.CreateUser(userName, password, email);// tạo user
                        Roles.AddUserToRole(userName, role); // thiết định người dùng vào nhóm đã chỉ định

                        String UserID = Membership.GetUser(userName).ProviderUserKey.ToString();

                        Response.Redirect("EHTPhanQuyen.aspx?UserID=" + UserID);
                    }
                    //tồn tại rồi thì hiển thị thông báo
                    else
                    {
                        if (IsVN)
                            ltrErorr.Text = HelpMethod.ErorrLogin(HangSo.check_Mail);
                        else
                            ltrErorr.Text = HelpMethod.ErorrLogin(HangSo.check_MailOther);
                        this.txtEmail.Focus();
                        return;
                    }
                }
                else if (action == HangSo.ACTION_UPDATE)
                {
                    MembershipUser theUser = Membership.GetUser(userName);
                    //trường hợp User Name tồn tại mới cho cập nhật lại thông tin
                    if (theUser != null)
                    {

                        theUser.Email = this.txtEmail.Text.Trim();


                        theUser.ChangePassword(txtPassword.Text, this.txtPass.Text);
                        Membership.UpdateUser(theUser);// lưu vào DB

                        // xóa user ra khỏi role được chỉ định
                        try
                        {
                            Roles.RemoveUserFromRole(userName, ViewState["Role"].ToString());
                        }
                        catch (Exception ex)
                        {
                        }

                        // cập nhật lại role cho user
                        try
                        {
                            Roles.AddUserToRole(userName, role);
                        }
                        catch (Exception ex)
                        {
                        }
                        if (role == HangSo.ROLE_ADMIN)
                        {
                            Response.Redirect("EHTUser.aspx");
                        }
                        else
                        {
                            Response.Redirect("EHTSystem.aspx");

                        }
                    }
                    //Chưa tồn tại thì trở lại trang list User
                    else
                    {
                        if (role == HangSo.ROLE_ADMIN)
                        {
                            Response.Redirect("EHTUser.aspx");
                        }
                        else
                        {
                            Response.Redirect("EHTSystem.aspx");

                        }
                    }
                }
            }
        }

        protected void ImgApply_Click(object sender, ImageClickEventArgs e)
        {
            String action = "";

            if (lbAdd_Edit.Text == HangSo.Add_VN || lbAdd_Edit.Text == HangSo.Add_Other)
                action = HangSo.ACTION_ADD;
            else
                action = HangSo.ACTION_UPDATE;

            if (ValidateData() == false)
            {
                ltrErorr.Text = HelpMethod.ErorrLogin(message);
                return;
            }
            else
            {
                String userName = this.txtAccount.Text.Trim();
                String password = this.txtPass.Text;
                String email = this.txtEmail.Text.Trim();
                String role;
                if (ckAdmin.Checked)
                    role = HangSo.ROLE_ADMIN;
                else
                    role = HangSo.ROLE_USER;
                if (action == HangSo.ACTION_ADD)
                {
                    MembershipUser theUser = Membership.GetUser(userName);

                    //trường hợp User Name chưa tồn tại mới cho đăng kí
                    if (theUser == null)
                    {
                        theUser = Membership.CreateUser(userName, password, email);// tạo user
                        Roles.AddUserToRole(userName, role); // thiết định người dùng vào nhóm đã chỉ định
                        String str = "";
                        if (IsVN == true)
                            str = HangSo.Add_VN;
                        else
                            str = HangSo.Add_Other;
                        Response.Redirect("EHTUserUI.aspx?User=" + userName + "&&Message=" + str);
                    }
                    //tồn tại rồi thì hiển thị thông báo
                    else
                    {
                        if (IsVN)
                            ltrErorr.Text = HelpMethod.ErorrLogin(HangSo.check_Mail);
                        else
                            ltrErorr.Text = HelpMethod.ErorrLogin(HangSo.check_MailOther);
                        this.txtEmail.Focus();
                        return;
                    }
                }
                else if (action == HangSo.ACTION_UPDATE)
                {
                    MembershipUser theUser = Membership.GetUser(userName);
                    //trường hợp User Name tồn tại mới cho cập nhật lại thông tin
                    if (theUser != null)
                    {
                        theUser.Email = this.txtEmail.Text.Trim();
                        Membership.UpdateUser(theUser);// lưu vào DB
                        // xóa user ra khỏi role được chỉ định
                        try
                        {
                            Roles.RemoveUserFromRole(userName, ViewState["Role"].ToString());
                        }
                        catch (Exception ex)
                        {
                        }

                        // cập nhật lại role cho user
                        try
                        {
                            Roles.AddUserToRole(userName, role);
                        }
                        catch (Exception ex)
                        {
                        }

                        String str = "";
                        if (IsVN == true)
                            str = HangSo.Add_VN;
                        else
                            str = HangSo.Add_Other;
                        Response.Redirect("EHTUserUI.aspx?User=" + userName + "&&Message=" + str);
                    }
                    //Chưa tồn tại thì trở lại trang list User
                    else
                    {
                        if (role == HangSo.ROLE_ADMIN)
                        {
                            Response.Redirect("EHTUser.aspx");
                        }
                        else
                        {
                            Response.Redirect("EHTSystem.aspx");

                        }
                    }
                }
            }
        }

        protected void ImageCancel_Click(object sender, ImageClickEventArgs e)
        {
            MembershipUser theUser = Membership.GetUser(Session["UserName"].ToString());
            String roleUser = Roles.GetRolesForUser(theUser.UserName)[0];
            if (roleUser == HangSo.ROLE_ADMIN)
            {
                Response.Redirect("EHTUser.aspx");
            }
            else
            {
                Response.Redirect("EHTSystem.aspx");

            }
        }
    }
}